﻿using System;
using System.Configuration;

namespace cit.CopyDetection
{
    /// <summary>
    /// Lớp đọc các thông số tùy biến cho chương trình
    /// </summary>
    public static class ConfigReader
    {
        private static string _baseFolder = AppDomain.CurrentDomain.BaseDirectory;
        private static string _model = null;        
        private static string _documents = null;
        private static string _vocabulary = null;        
        private static int _min_length = -1;
        private static double _threshold = -1D;
        private static string _connectionString = null;

        /// <summary>
        /// Đường dẫn thư mục chính chương trình
        /// </summary>
        public static string BasePath
        {
            get { return _baseFolder; }
        }

        /// <summary>
        /// Đường dẫn tập tin mô hình 
        /// </summary>
        public static string ModelPath
        {
          get 
          {
              if (_model == null) _model = ConfigurationManager.AppSettings["model"];
              return _baseFolder + _model; 
          } 
        }

        /// <summary>
        /// Đường dẫn tuyệt đối thư mục chứa các tài liệu đã đăng ký
        /// </summary>
        public static string DocumentPath
        {
            get { return _baseFolder + DocumentFolder; } 
        }

        /// <summary>
        /// Đường dẫn tập tin từ vựng
        /// </summary>
        public static string VocabularyPath
        {
            get
            {
                if (_vocabulary == null) _vocabulary = ConfigurationManager.AppSettings["vocabulary"];
                return _baseFolder + _vocabulary;
            }
        }

        /// <summary>
        /// Đường dẫn tương đối thư mục chứa các tài liệu đã đăng ký
        /// </summary>
        public static string DocumentFolder
        {
            get 
            {
                if (_documents == null) _documents = ConfigurationManager.AppSettings["documents"];
                return _documents; 
            }
        }

        /// <summary>
        /// Chiều dài tối thiểu các đoạn văn bản
        /// </summary>
        public static int MinLength
        {
            get 
            {
                if (_min_length == -1) _min_length = int.Parse(ConfigurationManager.AppSettings["length"]);
                return _min_length; 
            }
        }

        /// <summary>
        /// Ngưỡng so sánh giữa các đoạn văn bản
        /// </summary>
        public static double Threshold
        {
            get 
            {
                if (_threshold == -1D) _threshold = double.Parse(ConfigurationManager.AppSettings["threshold"]);
                return _threshold; 
            }
        }

        /// <summary>
        /// Chuỗi kết nối CSDL
        /// </summary>
        public static string ConnectionString
        {
            get
            {
                if (_connectionString == null) _connectionString = ConfigurationManager.ConnectionStrings["LocalDatabase"].ConnectionString;
                return _connectionString;
            }
        }
    }
}
